/**
 * @file bull_hal_sys_memory.h
 * @brief 
 * @author yejing (yejh@gongniu.cn)
 * @version 1.0
 * @date 2024-05-08
 * 
 * Copyright 2021-2023 GongNiu Inc. All Rights Reserved.
 * 
 */

#ifndef  BULL_HAL_SYS_MEMORY_H
#define  BULL_HAL_SYS_MEMORY_H

#include "bull_hal_adapter.h"
/**
 * @brief 申请内存
 * 
 * @param size 申请内存大小
 * @return void* 返回申请内存地址
 */
void *bull_hal_sys_memory_malloc(const size_t size);



/**
 * @brief 释放内存
 * 
 * @param ptr 需要被释放的内存地址
 */
void bull_hal_sys_memory_free(void* ptr);


/**
 * 功能：重新分配内存空间
 * 参数：
 *      prt：指向先前分配的内存块的指针。如果此指针为NULL，则函数等同于malloc分配一个新的内存块。
 *      size：请求的新内存块的大小。
 * 返回值：
 *      如果成功，返回指向重新分配的内存块的指针；如果失败，返回NULL。
 */
void *bull_hal_sys_memory_realloc( void *prt, const size_t size );

/**
 * 使用calloc函数分配内存。
 * 
 * 本函数旨在提供一个统一的内存分配接口，封装了calloc的调用。通过此函数，可以在需要时分配零初始化的内存块。
 * 
 * @param nitems -- 要被分配的元素个数
 * @param size -- 元素的大小 
 * @return 返回指向分配的内存块的指针。如果分配失败，返回NULL。
 */
void *bull_hal_sys_memory_calloc( size_t nitems, size_t size);


/**
 * @brief 使用SPIRAM内存
 * 
 * @param size 
 * @return void* 
 */
void *bull_hal_sys_memory_malloc_spiram( const size_t size );


/**
 * @brief 释放SPIRAM内存
 * 
 * @param ptr 
 */
void bull_hal_sys_memory_free_spiram( void *ptr );


/**
 * @brief 重新分配内存空间使用SPIRAM内存
 * 
 * @param prt 
 * @param size 
 * @return void* 
 */
void *bull_hal_sys_memory_realloc_spiram( void *prt, const size_t size );


#endif

